package io.sage.common.utils; 

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**  
 * @Description: 证件类型验证工具类
 * @date 2018年3月24日 下午2:54:43 
 * @version V1.0   
 */
public class CertVerifyUtils {

	/**身份证格式验证 **/  
	private static Pattern ID_NUMBER_PATTERN = Pattern.compile("(^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$)|(^[1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{2}[0-9Xx]$)");
	
	/**QQ号格式验证 **/  
	private static Pattern QQ_NUMBER_PATTERN = Pattern.compile("[1-9][0-9]{4,14}");
	
	/**密码格式验证 **/  
	private static Pattern PASSWORD_NUMBER_PATTERN = Pattern.compile("/w{8,20}$/");
	
	/**微信号格式验证 **/  
	private static Pattern WECHAT_NUMBER_PATTERN = Pattern.compile("/^[a-zA-Z]{1}[-_a-zA-Z0-9]{5,19}$/");
	
	/** 检查护照是否合法 */
	private static Pattern PASSPORT_NUMBER_PATTERN = Pattern.compile("^1[45][0-9]{7}|G[0-9]{8}|P[0-9]{7}|S[0-9]{7,8}|D[0-9]+$");
	 
	/** 检查军官证是否合法*/
	private static Pattern  WARDROOM_NUMBER_PATTERN = Pattern.compile("/^[a-zA-Z0-9]{7,21}$/");
	 
	/** 港澳通行证验证   */
	private static Pattern HKMAKAO_NUMBER_PATTERN = Pattern.compile("/^[HMhm]{1}([0-9]{10}|[0-9]{8})$/");
	 
	/** 台湾通行证验证   */
	private static Pattern TAIWAN1_NUMBER_PATTERN = Pattern.compile("/^[0-9]{8}$/");
	private static Pattern TAIWAN2_NUMBER_PATTERN = Pattern.compile("/^[0-9]{10}$/");
	 
	 
	/**
	 * 方法  返回true为包含中文；false不包含
	 * @param str
	 * @return
	 */
	public static boolean isContainsChinese(String str)
	{
	    Pattern pat = Pattern.compile("[\u4e00-\u9fa5]");
	    Matcher matcher = pat.matcher(str);
	    boolean flg = false;
	    if (matcher.find())    {
	        flg = true;
	    }
	    return flg;
	    
	}
	/** 
     * 验证输入的邮箱格式是否符合 
     * @param email 
     * @return 是否合法 
     */  
	public static boolean emailFormat(String email)  
    {  
        boolean tag = true;  
        final String pattern1 = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";  
        final Pattern pattern = Pattern.compile(pattern1);  
        final Matcher mat = pattern.matcher(email);  
        if (!mat.find()) {  
            tag = false;  
        }  
        return tag;  
    } 
	
	/** 
     * 验证输入的电话是否符合 
     * @param phone 
     * @return 是否合法 
     */  
	public static boolean phoneFormat(String phone)  
    {  
        boolean tag = true;  
        if(phone.length()>11){
        	return false;
        }
        final Pattern pattern = Pattern.compile("1([\\d]{10})|((\\+[0-9]{2,4})?\\(?[0-9]+\\)?-?)?[0-9]{7,8}");  
        final Matcher mat = pattern.matcher(phone);  
        if (!mat.find()) {  
            tag = false;  
        }  
        return tag;  
    }  
	
	/** 
	* @Title: isIdNumber 
	* @Description: 身份证号格式验证 
	* @param @param str
	* @return boolean    返回类型 
	* @author: wangyufeng
	* @date:   2018年3月24日 下午3:44:08   
	*/
	public static boolean isIdNumber(String str){
        Matcher match = ID_NUMBER_PATTERN.matcher(str);
        if(match.matches()) {
             return true;
        }else {
             return false;
        }
    }
	
	/** 
	* @Title: isQQNumber 
	* @Description: QQ号格式验证 
	* @param @return    设定文件 
	* @return boolean    返回类型 
	* @author: wangyufeng
	* @date:   2018年3月24日 下午3:46:36   
	*/
	public static boolean isQQNumber(String str){
		Matcher match = QQ_NUMBER_PATTERN.matcher(str);
		if(match.matches()) {
			return true;
		}else {
			return false;
		}
	}
	public static boolean isPasswordNumber(String str){
		Matcher match = PASSWORD_NUMBER_PATTERN.matcher(str);
		if(match.matches()) {
			return true;
		}else {
			return false;
		}
	}
	
	/** 
	* @Title: isWeChatNumber 
	* @Description: 微信号格式验证 
	* @param @param str
	* @return boolean    返回类型 
	* @author: wangyufeng
	* @date:   2018年3月29日 下午9:24:38   
	*/
	public static boolean isWeChatNumber(String str){
		Matcher match = WECHAT_NUMBER_PATTERN.matcher(str);
		if(match.matches()) {
			return true;
		}else {
			return false;
		}
	}
	
	/** 
	* @Title: isPassport 
	* @Description: 护照格式验证 
	* @param @return    设定文件 
	* @return boolean    返回类型 
	* @author: wangying
	* @date:   2018年3月24日 下午7:31:36   
	*/
	public static boolean isPassport(String str){
		Matcher match = PASSPORT_NUMBER_PATTERN.matcher(str);
		if(match.matches()) {
			return true;
		}else {
			return false;
		}
	}
	
	/** 
	* @Title: isPassport 
	* @Description: 军官证格式验证 
	* @param @return    设定文件 
	* @return boolean    返回类型 
	* @author: wangying
	* @date:   2018年3月24日 下午7:31:36   
	*/
	public static boolean isOfficercard(String str){
		Matcher match = WARDROOM_NUMBER_PATTERN.matcher(str);
		if(match.matches()) {
			return true;
		}else {
			return false;
		}
	}
	
	/** 
	* @Title: isPassport 
	* @Description: 港澳通行证格式验证 
	* @param @return    设定文件 
	* @return boolean    返回类型 
	* @author: wangying
	* @date:   2018年3月24日 下午7:31:36   
	*/
	public static boolean isHkmakao(String str){
		Matcher match = HKMAKAO_NUMBER_PATTERN.matcher(str);
		if(match.matches()) {
			return true;
		}else {
			return false;
		}
	}
	
	/** 
	* @Title: isPassport 
	* @Description: 台湾通行证格式验证 
	* @param @return    设定文件 
	* @return boolean    返回类型 
	* @author: wangying
	* @date:   2018年3月24日 下午8:06:36   
	*/
	public static boolean isTaiwan(String str){
		Matcher match1 = TAIWAN1_NUMBER_PATTERN.matcher(str);
		Matcher match2 = TAIWAN2_NUMBER_PATTERN.matcher(str);
		if(match1.matches() || match2.matches()) {
			return true;
		}else {
			return false;
		}
	}
	
	/**
	 * 根据证件类型验证证件号
	 * @param str
	 * @return
	 */
	public static boolean checkIdNumber(String str){
		if(CertVerifyUtils.isIdNumber(str) || CertVerifyUtils.isPassport(str) || CertVerifyUtils.isOfficercard(str) ||
				CertVerifyUtils.isHkmakao(str) || CertVerifyUtils.isTaiwan(str)){
		     return true;
		}else{
			return false;
		}
	}
	
	public static void main(String[] args) {
		/*String idNum = "130525199008051115";
		System.out.println(isIdNumber(idNum));
		String qqNum = "771511078";
		System.out.println(isQQNumber(qqNum));*/
		String passport = "158426199981128596";
		System.out.println(isPassport(passport));
		System.out.println(isIdNumber(passport));
		
		
	}

}
